/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package servlets;

import DTOs.DTOTeatros;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 *
 * @author HP_Propietario
 */
public class TheatersServlet extends HttpServlet {

    /**
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {

    String action = request.getParameter("action");
    HttpSession session = request.getSession();
    try{
        if(action==null){
            session.setAttribute("error", "Lo sentimos. Ha ocurrido un error procesando la solicitud.");
            response.sendRedirect("error.jsp");
        }else if(action.equals("searchTheaters")){
            List<DTOs.DTOTeatros> tlist = new ArrayList<DTOs.DTOTeatros>();
            businessDelegate.BusinessDelegate bd = new businessDelegate.BusinessDelegate();
            try{
                String date = request.getParameter("date");
                tlist = bd.getPresentationsByDate(date);
                session.setAttribute("theaterList", tlist);
                response.sendRedirect("buscarTeatro.jsp");
            }catch(Exception e){
                e.printStackTrace();
                response.sendRedirect("index.jsp");
            }
        }else if(action.equals("addToCart")){
            String id = request.getParameter("id");
            int ub=-1;
            long idt=0;            
            List<DTOs.DTOTeatros> dto = (List<DTOs.DTOTeatros>) session.getAttribute("DTOT");
            List<DTOs.DTOTeatros> dtoBusqueda = (List<DTOs.DTOTeatros>) session.getAttribute("theaterList");
            if(dtoBusqueda==null||id.equals("")||id==null){
                String mensaje="Acción invalida";
                request.setAttribute("error", mensaje);
                request.getRequestDispatcher("buscarTeatro.jsp").include(request, response);
            }
            try{
                idt = Long.parseLong(id);
            }catch(Exception e){
                String mensaje="Ha ocurrio un error al agregar al carro de compra <br> Error: ID del teatro invalido";
                request.setAttribute("error", mensaje);
                request.getRequestDispatcher("buscarTeatro.jsp").include(request, response);
            }
            for(int i=0; i<dtoBusqueda.size();i++){
                if(idt == dtoBusqueda.get(i).getId()){
                    ub=i;
                }
            }
            System.out.println("mirar id "+ub);
            System.out.println("id "+idt);
            if(ub==(long)-1){
                String mensaje="Ha ocurrio un error al agregar al carro de compra <br> Error: ID del teatro invalido";
                request.setAttribute("error", mensaje);
                request.getRequestDispatcher("buscarTeatro.jsp").include(request, response);
            }
            if(dto==null){
                dto = new ArrayList<DTOTeatros>();
                dto.add(dtoBusqueda.get(ub));
            }else{
                boolean esta = false;
                for(int i =0; i<dto.size();i++){
                    if(idt == dto.get(i).getId()){
                        esta = true;
                    }
                }
                if(esta){
                    String mensaje="El teatro ya esta en el plan";
                    request.setAttribute("error", mensaje);
                    request.getRequestDispatcher("buscarTeatro.jsp").include(request, response);
                }else{
                    dto.add(dtoBusqueda.get(ub));
                }
            }
            session.setAttribute("DTOT", dto);
            String mensaje="El teatro se ha agregado al plan";
            request.setAttribute("error", mensaje);
            request.getRequestDispatcher("buscarTeatro.jsp").include(request, response);
        }else if(action.equals("remove")){
            int listPlace = -1;
            int id = 0;
            String place = request.getParameter("pl");
            String idt = request.getParameter("id");
            List<DTOs.DTOTeatros> theatersCart = (List<DTOs.DTOTeatros>) session.getAttribute("DTOT");
            if(theatersCart == null || place == null || idt == null || place.equals("") || idt.equals("")){
                String mensaje="Ha ocurrido un error";
                request.setAttribute("error", mensaje);
                request.getRequestDispatcher("carro.jsp").include(request, response);
            }else{
                try{
                    listPlace = Integer.parseInt(place);
                    id = Integer.parseInt(idt);
                    System.out.println("ubicacion lista "+listPlace);
                }catch(Exception e){
                    String mensaje="Ha ocurrido un error al eliminar del carro de compra <br> Error: el ID del teatro es invalido";
                    request.setAttribute("error", mensaje);
                    request.getRequestDispatcher("carro.jsp").include(request, response);
                }
                if(listPlace == -1){
                    String mensaje="Ha ocurrido un error al eliminar del carro de compra <br> Error: el ID del teatro es invalido";
                    request.setAttribute("error", mensaje);
                    request.getRequestDispatcher("carro.jsp").include(request, response);
                }
                boolean exists = false;
                if(theatersCart.get(listPlace) != null){
                    if(id == theatersCart.get(listPlace).getId()){
                        exists = true;
                    }
                }else{
                    String mensaje="Ha ocurrido un error al eliminar del carro de compra <br> Error: el ID del teatro es invalido";
                    request.setAttribute("error", mensaje);
                    request.getRequestDispatcher("carro.jsp").include(request, response);
                }
                if(!exists){
                    String mensaje="La reserva de teatro no puede eliminarse del carro porqu no está en el plan";
                    request.setAttribute("error", mensaje);
                    request.getRequestDispatcher("carro.jsp").include(request, response);
                }else{
                    theatersCart.remove(listPlace);
                }
                session.setAttribute("DTOT", theatersCart);
                String mensaje="La reserva de teatro se ha eliminado del plan";
                request.setAttribute("error", mensaje);
                request.getRequestDispatcher("carro.jsp").include(request, response);
            }
         }
        }catch(Exception e){
            System.out.println("error");
            response.sendRedirect("index.jsp");
        }
        /*response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
            /* TODO output your page here
            out.println("<html>");
            out.println("<head>");
            out.println("<title>Servlet TheatersServlet</title>");
            out.println("</head>");
            out.println("<body>");
            out.println("<h1>Servlet TheatersServlet at " + request.getContextPath () + "</h1>");
            out.println("</body>");
            out.println("</html>");

        } finally {
            out.close();
        }*/
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /**
     * Handles the HTTP <code>GET</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Handles the HTTP <code>POST</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Returns a short description of the servlet.
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>

}
